home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / AESWINDO.D < prev    next >
Encoding:
Modula Definition  |  1990-10-09  |  9.6 KB  |  257 lines

  1. DEFINITION MODULE AESWindows;
  2.  
  3.  
  4. (*  Megemax-Module 2 GEM-Library :  Die AES Fensterfunktionen
  5.  *
  6.  *  Autor: Manuel Chakravarty           Erstellt :  05.11.87
  7.  *
  8.  *  Version   2.2     V#0016
  9.  *)
  10.  
  11.  
  12. FROM    MOSGlobals      IMPORT MemArea;
  13.  
  14. FROM    GrafBase        IMPORT Point, Rectangle;
  15.  
  16. FROM    GEMGlobals      IMPORT PtrMaxStr, PtrObjTree;
  17.  
  18.  
  19.  
  20.                 (*  Window Manager  *)
  21.                 (*  ==============  *)
  22.  
  23.  
  24. CONST   NoWindow        = 65535;    (*  Dies ist der Wert für ein nicht be-
  25.                                      *  setztes Window-Handle
  26.                                      *)
  27.  
  28.         DeskHandle      = 0;        (*  Dies ist das Fensterkennung der
  29.                                      *  Desktop-Oberfläche
  30.                                      *)
  31.  
  32.  
  33. TYPE    WindowElement   = (nameBar,    closer,    fuller,     mover,
  34.                            infoBar,    sizer,     upArrow,    downArrow,
  35.                            vertSlider, leftArrow, rightArrow, horSlider);
  36.  
  37.         WElementSet     = SET OF WindowElement;
  38.  
  39.  
  40. PROCEDURE CreateWindow (    elems : WElementSet;
  41.                             max   : Rectangle;
  42.                         VAR handle: CARDINAL   );
  43.  
  44.         (*  Es wird ein neues Fenster beim AES angemeldet.
  45.          *
  46.          *  'elems'     -- die Elemente, die das Fenster besitzt.
  47.          *  'max'       -- die maximalen Ausmaße des Fensters.
  48.          *  'handle'    -- liefert die Fensterkennung als Ergebnis.Be-
  49.          *                 sitzt es den Wert 'NoWindow', so konnte kein
  50.          *                 Fenster mehr erzeugt werden. (Das GEM ist nur
  51.          *                 für eine Verwaltung von höchstens sieben
  52.          *                 Fenstern ausgelegt).
  53.          *)
  54.  
  55. PROCEDURE OpenWindow (handle: CARDINAL; frame: Rectangle);
  56.  
  57.         (*  Das Fenster mit der Kennung 'handle' wird in der Größe 'frame'
  58.          *  auf den Bildschirm gebracht.
  59.          *)
  60.  
  61. PROCEDURE CloseWindow (handle: CARDINAL);
  62.  
  63.         (*  Das durch die Kennung 'handle' bezeichnete Fenster wird vom
  64.          *  Bildschirm entfernt. Es wird dabei nicht aus dem Speicher
  65.          *  gelöscht.
  66.          *)
  67.  
  68. PROCEDURE DeleteWindow (handle: CARDINAL);
  69.  
  70.         (*  Das Fenster, das die Kennung 'handle' besitzt wird abgemeldet.
  71.          *  Das bedeutet, daß dieses Fenster nicht mehr angesprochen werden
  72.          *  darf, es ist gelöscht.
  73.          *)
  74.  
  75.  
  76. TYPE    WSizeMode       = (workSize, borderSize, previousSize, fullSize);
  77.  
  78. PROCEDURE WindowSize (handle: CARDINAL; typ: WSizeMode): Rectangle;
  79.  
  80.         (*  Diese Funktion liefert die Ausmaße eines Fensters. Es können
  81.          *  folgende Ausmaße erfragt werden:
  82.          *
  83.          *  'workSize'     -- Die Größe des Arbeitsbereichs (ohne Fenster-
  84.          *                    elemente)
  85.          *  'borderSize'   -- Die Größe des gesamten Fensters (mit Fenster-
  86.          *                    elementen)
  87.          *  'previousSize' -- Die letzte Größe des Gesamtfensters
  88.          *  'fullSize'     -- Die maximale Größe des Fensters
  89.          *
  90.          *  Insbesondere können, mit Hilfe der Kennung 'DeskHandle', die
  91.          *  Ausmaße des Desktop's erfragt werden.
  92.          *)
  93.  
  94.  
  95. TYPE    WSliderMode     = (horPosition, vertPosition, horSize, vertSize);
  96.  
  97. PROCEDURE WindowSliderValue (handle: CARDINAL; typ: WSliderMode): INTEGER;
  98.  
  99.         (*  Es wird die Position eines Fensterschiebers geliefert.
  100.          *  'handle' enthält die Fensterkennung und 'typ' kann fol-
  101.          *  gende Werte annehmen:
  102.          *
  103.          *  'horPosition'  -- Position des horizontalen Schiebers
  104.          *  'vertPosition' -- Position des vertikalen Schiebers
  105.          *  'horSize'      -- Ausmaße des horizontalen Schiebers
  106.          *  'vertSize'     -- Ausmaße des vertikalen Schiebers
  107.          *
  108.          *  Schieberposition und Schiebergröße werden in Promille ange-
  109.          *  geben (Wertebereich: 0 - 1000), bei der Schiebergröße ist
  110.          *  allerdings auch der Wert -1 zugelassen, der die kleinste
  111.          *  mögliche Größe repräsentiert.
  112.          *)
  113.  
  114. PROCEDURE TopWindow (): CARDINAL;
  115.  
  116.         (*  Liefert die Fensterkennung des oben aufliegenden Fensters.
  117.          *)
  118.  
  119.  
  120. TYPE    RListMode       = (firstElem, nextElem);
  121.  
  122. PROCEDURE WindowRectList (handle: CARDINAL; typ: RListMode): Rectangle;
  123.  
  124.         (*  Zum Zeichnen innerhalb teilweiser verdeckter Fensterbereiche
  125.          *  ist es unerläßlich, die nicht verdeckten Ausschnitte zu ken-
  126.          *  nen. Genau diese Ausschnitte sind in der so genannten Recht-
  127.          *  eckliste, die von dieser Funktion ausgelesen wird, festgehal-
  128.          *  ten. Das Ende der Liste ist durch ein Rechteck mit der Fläche
  129.          *  Null gekennzeichnet.
  130.          *  Besitzt 'typ' den Wert 'firstElem', so wird das erste Element
  131.          *  der Rechteckliste gelesen. Bei jedem folgenden Aufruf mit
  132.          *  'nextElem' wird sukzessiv ein weiteres Element ermittelt.
  133.          *)
  134.  
  135. PROCEDURE ScreenBuffer (handle: CARDINAL): MemArea;
  136.  
  137.         (*  Es wird die Beschreibung eines Speicherbereichs geliefert,
  138.          *  der vom AES zur Zwischenspeicherung von Bildschirminhalten
  139.          *  benutzt wird.
  140.          *  Dieser Bereich kann ohne weiteres auch von Anwendungspro-
  141.          *  grammen mitverwendet werden. Allerdings sollte er nur für
  142.          *  kurzfristige Aufgaben benutzt werden. Sein Umfang beträgt
  143.          *  in der Regel circa 8 kByte.
  144.          *  Beim Aufruf der Funktion muß als Kennung ('handle') 'Desk
  145.          *  Handle' eingetragen werden.
  146.          *)
  147.  
  148.  
  149. TYPE    WStringMode     = (nameStr, infoStr);
  150.  
  151. PROCEDURE SetWindowString (handle: CARDINAL;
  152.                            typ   : WStringMode;
  153.                            str   : PtrMaxStr);
  154.  
  155.         (*  Einem Fenster wird eine Zeichenkette für einen Namen oder
  156.          *  eine Informationszeile zugewiesen.
  157.          *
  158.          *  'handle'    -- Die Kennung des Fensters
  159.          *  'typ'       -- '= nameStr': Name
  160.          *                 '= infoStr': Infozeile
  161.          *  'str'       -- Enthält einen Zeiger auf die Zeichenkette.
  162.          *)
  163.  
  164. PROCEDURE SetWindowSize (handle: CARDINAL; frame: Rectangle);
  165.  
  166.         (*  Damit werden die Fensterausmaße des Fensters 'handle' auf
  167.          *  'frame' gesetzt.
  168.          *  Es muß immer die Größe der Fensteraußenmaße angegeben werden.
  169.          *)
  170.  
  171. PROCEDURE SetWindowSlider (handle: CARDINAL;
  172.                            typ   : WSliderMode;
  173.                            value : INTEGER);
  174.  
  175.         (*  Setzt ein Fensterschieberparameter auf den Wert 'value'.
  176.          *  Die Parameterbeschreibung entspricht der von 'WindowSliderValue'.
  177.          *)
  178.  
  179. PROCEDURE SetTopWindow (handle: CARDINAL);
  180.  
  181.         (*  Das Fenster mit der Kennung 'handle' wird nach oben gebracht.
  182.          *)
  183.  
  184. PROCEDURE SetNewDesk (tree: PtrObjTree; first: CARDINAL);
  185.  
  186.         (*  Diese Routine erlaubt es eine eigene Desktop-Oberfäche anzu-
  187.          *  melden. Dadurch kann der Bildschirmhintergrund frei gestaltet
  188.          *  werden. Die Oberfläche muß in Form eines Objektbaumes vor-
  189.          *  liegen.
  190.          *  'tree'      -- derObjektbaum
  191.          *  'first'     -- gibt das erste zu Zeichnende Objekt des
  192.          *                 Baumes an.
  193.          *
  194.          *  Hinweis: Durch das Anmelden wird der neue Hintergrund noch
  195.          *           nicht dargestellt, dafür muß erst ein Neuzeichnen
  196.          *           veranlaßt werden (Siehe 'AESForms.FormDial').
  197.          *)
  198.  
  199. PROCEDURE FindWindow (loc: Point): CARDINAL;
  200.  
  201.         (*  Diese Funktion ermittelt, welches Fenster sich an der Position
  202.          *  'loc' befindet. Als Ergebnis wird die Fensterkennung geliefert.
  203.          *)
  204.  
  205. PROCEDURE UpdateWindow (update: BOOLEAN);
  206.  
  207.         (*  Hiermit wird dem AES mitgeteilt, zu welchem Zeitpunkt eine An-
  208.          *  wendung Ausgaben in ein Fenster tätigen will. Während dieser
  209.          *  Zeit reagiert das AES nicht auf Versuche des Anwenders die Menu-
  210.          *  zeile zu benutzen oder Fensterelemente zu bedienen.
  211.          *  Mit 'update = TRUE' werden die Ausgaben eingeleitet und mit
  212.          *  'FALSE' beendet.
  213.          *  Diese Routine hat einen internen Zähler, so daß für zwei ge-
  214.          *  schachtelte Aufrufe mit 'TRUE' auch zwei mit 'FALSE' folgen
  215.          *  müßen.
  216.          *)
  217.  
  218. PROCEDURE MouseControl (user: BOOLEAN);
  219.  
  220.         (*  Die Reaktion des AES auf diese Routine entspricht im wesentlichen
  221.          *  der auf 'UpdateWindow', nur ist dafür vorgesehen, daß die Anwen-
  222.          *  dung die Kontrolle über alle Mausfunktionen selbst übernimmt.
  223.          *)
  224.  
  225.  
  226. TYPE    WCalcMode       = (calcBorder, calcWork);
  227.  
  228. PROCEDURE CalcWindow (typ  : WCalcMode;
  229.                       elems: WElementSet;
  230.                       in   : Rectangle  ): Rectangle;
  231.  
  232.         (*  Diese Funktion berechnet aus Fensteraußenmaßen die Arbeitsbe-
  233.          *  reichsmaße und umgekehrt.
  234.          *
  235.          *  'elems'      -- enthält die Fensterelemente
  236.          *
  237.          *  Für 'typ' gilt:
  238.          *
  239.          *  'calcBorder' -- 'in' enthält Arbeitsbereichsgröße und das Er-
  240.          *                   gebnis sind die Außenmaße.
  241.          *  'calcWork'   -- 'in' enthält die Außenmaße un das Ergebnis ist
  242.          *                   die Arbeitsbereichsgröße.
  243.          *)
  244.  
  245.  
  246. PROCEDURE ResetWindows ();
  247.  
  248.         (*  Es werden alle noch offenen Fenster der Applikation geschlossen,
  249.          *  außerdem wird 'UpdateWindow' und 'MouseControl' zurückgesetzt.
  250.          *
  251.          *  ACHTUNG: Diese Prozedur ist erst ab TOS 1.4 funktionsfähig.
  252.          *           Die TOS-Version kann mit 'GEMEnv.GEMVersion' erfragt
  253.          *           werden.
  254.          *)
  255.  
  256.  
  257. END AESWindows.